package main

import "fmt"

//golang接口中不能有任何变量
type AInterface interface {
	Say()
}

type Stu struct {
	Name string
}

func (stu Stu) Say() {
	fmt.Println("Stu Say()")
}

//非结构体类型也能实现接口
type integer int

func (i integer) Say() {
	fmt.Println("integer Say i=", i)
}

type BInterface interface {
	Hello()
}

//一个结构体可以实现多个接口
type Monster struct {
}

func (m Monster) Hello() {
	fmt.Println("Monster Hello()")
}

func (m Monster) Say() {
	fmt.Println("Monster Say()")
}

func main() {

	var stu Stu //结构体变量 实现了Say() 实现了AInterface
	//接口本身不能创建实例，但是可以指向一个实现了该接口的自定义类型的变量（实例）
	var a AInterface = stu
	a.Say()

	var i integer = 10
	var b AInterface = i
	b.Say()

	//Monster实现了AInterface和BInterface
	var monster Monster
	var a2 AInterface = monster
	var b2 BInterface = monster
	a2.Say()
	b2.Hello()
}
